<?php

/*
* PHP可以定义一个内置方法__clone()来调整对象的克隆行为
*
* 当一个对象被克隆的时候，会自动调用__clone()方法
*
* 而克隆后的对象可以在方法体内进行调整（重新赋值）
* 
*/

class Computer{
	public $_name = '联想';

	//克隆后重新赋值，可以在外部也可以在内部
	
	public function __clone(){
		//把$computer2的值改为Dell
		//这里调用的$this指代$computer2(克隆后的对象)
		$this->_name = 'Dell';   //可以在这里重新赋值
	}

}

$computer = new Computer();
echo $computer->_name;

//克隆一个Computer
$computer2 = clone $computer;
echo $computer2->_name;         //也可以在这里进行赋值



/*
*  区分：引用传递，独立实例，克隆
*
*  引用传递：就是两个对象指向同一个地址
*
*            $computer1 = new Computer();  //实例化类创建一个对象后
*            $computer2 = $computer1;      //把实例化类的地址赋给另一个对象
*
*
*  独立实例：就是两个对象指向两个地址
*
*            $computer1 = new Computer();   //分别实例化类，创建不同的对象
*            $computer2 = new Computer();   //他们互不相关，指向地址也不一样
*
*
*  克隆：以实例化类创建的一个对象作为父本，克隆出另一个对象，只不过克隆出来的对象和父本
*        长的一样，但是是不同的个体，可以对克隆后的对象重新赋值
*
*
*        $computer1 = new Computer();   //创建一个对象$computer1
*        $computer2 = clone $computer1; //克隆$computer1
*/



















